KingBase Python 运维脚本 自动重启kingbase 数据库

远程检查kingbase 服务器并启动kingbase 数据库。

# 此脚本可以远程连接Linux 服务器。并执行操作。
# 使要导入paramiko,用pip3 install paramiko 命令安装扩展包,
# python 版本为3.9 以上。
import paramiko

# ssh连接配置信息
hostname = "192.168.10.158"
host_port = 22
username = "kingbase"
password = "kingbase"
server_dir = "/KingbaseES/V8/Server/bin"
datadir = "/data"
# 准备命令
sys_ctl_status = f"source ~/.bash_profile;sys_ctl status -D {datadir}"
sys_ctl_start = f"source ~/.bash_profile;sys_ctl start -D {datadir} -l log"

# 创建ssh连接

ssh_client = paramiko.SSHClient()
# 第一次SSH 连接时确认信息。
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# 创建连接
ssh_client.connect(hostname=hostname, port=host_port, username=username, password=password)


# 检查kingbase 服务状态函数
def kingbase_check():
    """"检查kingbase server 状态。"""
    stdin, stdout, stderr = ssh_client.exec_command(sys_ctl_status)
    stdout_info = str(stdout.read().decode('utf-8'))
    return stdout_info


# 启动kingbase 服务
def kingbase_startup():
    """"检查kingbase server 状态。"""
    stdin, stdout, stderr = ssh_client.exec_command(sys_ctl_start)
    stdout_info = str(stdout.read().decode('utf-8'))
    return stdout_info


# main 主进程。
stdout_info = kingbase_check()
if "PID:" in stdout_info:
    """ 如果进程ID 存在,数据库进程状态为启动状态。"""
    print(f"PROMOTE:Server is running. ")
    stdout_info = kingbase_check()
    """ 打印数据库状态信息。"""
    print(f"{stdout_info}")
else:
    """ 如果进程ID 不存在,数据库进程为停止状态。"""
    print("PROMOTE:server is not runing, We will startup databaes")
    """ 启动kingbase 数据库。"""
    stdout_info = kingbase_startup()
    """ 打印启动信息。"""
    print(f"{stdout_info}")
# 关闭ssh 连接
ssh_client.close()